package com.transaction.demo.base.biz.impl;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import lombok.extern.slf4j.Slf4j;
import static com.transaction.demo.base.enums.ExceptionEnum.MENU_EXISTING;
import static com.transaction.demo.base.enums.ExceptionEnum.MENU_NOT_EXISTING;

import com.transaction.demo.base.dao.SysMenuDao;
import com.transaction.demo.base.exception.BaseServiceException;
import com.transaction.demo.base.biz.SysMenuBiz;
import com.transaction.demo.base.entity.SysMenuBean;
import com.transaction.demo.base.vo.req.SysMenuAddReqVo;
import com.transaction.demo.base.vo.req.SysMenuUpdateReqVo;
import com.transaction.demo.base.vo.resp.SysMenuRespVo;

/**
 * 描述：菜单管理
 * 作者：马庆智
 * 日期：2023/03/28 17:07:14
 */
@Slf4j
@Service
public class SysMenuBizImpl implements SysMenuBiz {

	@Autowired
	private SysMenuDao sysMenuDao;

	/**
	 * 查询菜单管理列表
	 *
	 * @return SysMenuResp
	 * @author 马庆智
	 * @date: 2023/03/28 17:07:14
	 */
	@Override
	public List<SysMenuRespVo> querySysMenuList() {

		return sysMenuDao.querySysMenuList(SysMenuBean.builder().build()).stream().map(x -> {
			SysMenuRespVo resp = new SysMenuRespVo();
			BeanUtils.copyProperties(x, resp);
			return resp;
		}).collect(Collectors.toList());

	}

	/**
	 * 查询菜单管理列表
	 *
	 * @return ResultPage<SysMenuResp>
	 * @author 马庆智
	 * @date: 2023/03/28 17:07:14
	 */
	@Override
	public List<SysMenuBean> querySysMenuListBean() {
		return sysMenuDao.querySysMenuList(SysMenuBean.builder().build());
	}

	/**
	 * 添加菜单管理
	 *
	 * @param menuReq 请求参数
	 * @return int
	 * @author 马庆智
	 * @date: 2023/03/28 17:07:14
	 */
	@Override
	public int saveSysMenu(SysMenuAddReqVo menuReq) {
		SysMenuBean menu = new SysMenuBean();
		BeanUtils.copyProperties(menuReq, menu);
		menu.setCreatedBy("koobe");
		menu.setCreatedDate(new Date());

		SysMenuBean sysMenuBean = sysMenuDao.querySysMenu(menu);

		if (sysMenuBean != null) {
			log.error("菜单信息:{}已存在", menu);
			throw new BaseServiceException(MENU_EXISTING);
		}

		return sysMenuDao.saveSysMenu(menu);
	}

	/**
	 * 删除菜单管理
	 *
	 * @param ids 请求参数
	 * @return int
	 * @author 马庆智
	 * @date: 2023/03/28 17:07:14
	 */
	@Override
	public int deleteSysMenu(String ids) {
		return sysMenuDao.deleteSysMenu(
				Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
	}

	/**
	 * 更新菜单管理
	 *
	 * @param menuReq 请求参数
	 * @return int
	 * @author 马庆智
	 * @date: 2023/03/28 17:07:14
	 */
	@Override
	public int updateSysMenu(SysMenuUpdateReqVo menuReq) {
		SysMenuBean menu = new SysMenuBean();
		menu.setMenuId(menuReq.getMenuId());

		SysMenuBean sysMenuBean = sysMenuDao.querySysMenu(menu);
		if (sysMenuBean == null) {
			log.error("菜单信息:{}不已存在", menuReq);
			throw new BaseServiceException(MENU_NOT_EXISTING);
		}

		BeanUtils.copyProperties(menuReq, sysMenuBean);
		sysMenuBean.setUpdatedBy("koobe");
		sysMenuBean.setUpdatedDate(new Date());

		return sysMenuDao.updateSysMenu(sysMenuBean);
	}

}